import utils from '@/libs/util.gaed'
const BASE_URL = '/study/categorys'
const TIME_FORMAT = 'yyyy年MM月dd日 hh:mm:ss'
const listToTree = (rootItem) => {
  if (!originList) {
    return null
  }
  // 没有给rootItem的时候，按照parent_id为null的规则找rootItem
  if (!rootItem) {
    originList.some((d, i) => {
      if (!d.parent_id) {
        rootItem = originList.splice(i, 1)
        return true
      }
    })
    if (rootItem.length > 0) {
      rootItem = rootItem[0]
    }
    rootItem.children = rootItem.children || []
  } else {
    // 从originList中剔除rootItem
    originList = originList.filter(d => d.id !== rootItem.id)
  }

  // 找到所有的parent_id为rootItem的id的项，递归查找，返回组装好的，再push到children中
  rootItem.children = originList
    .filter(d => d.parent_id === rootItem.id)
    .map(item => {
      let res = listToTree(item)
      return res
    })

  // 从originList中删除已经添加到树结构里的数据
  originList = originList.filter(d => d.parent_id !== rootItem.id)
  return rootItem
}
let originList = []
const util = {
  getCategoryTree () {
    return new Promise((resolve, reject) => {
      utils.fetchData.call(this, BASE_URL).then(res => {
        console.log('列表数据为：', res.lists)
        originList = res.lists.sort((a, b) => a.id - b.id)
          .map((d, index) => {
            if (d.create_time) {
              d.createTimeStr = utils.formatDate(new Date((+d.create_time) * 1000), TIME_FORMAT)
            } else {
              d.createTimeStr = ''
            }
            if (d.update_time) {
              d.updateTimeStr = utils.formatDate(new Date((+d.update_time) * 1000), TIME_FORMAT)
            } else {
              d.updateTimeStr = ''
            }
            d.label = d.name
            d.index = index
            return d
          })
        let treeData = []
        if (originList.length > 0) {
          // 支持originList中没有唯一根节点的情况
          while (originList.length > 0) {
            // 每次执行listToTree的时候，会将已经归入tree结构中的数据移除，最终将全部移除完毕
            treeData.push(listToTree(originList[0]))
          }
        }
        resolve(treeData)
      }).catch(err => {
        console.warn(err)
        reject(err)
      })
    })
  }
}

export default util
